package br.com.foxinline.servico;

import br.com.foxinline.generico.ServicoGenerico;
import br.com.foxinline.modelo.Cidade;
import br.com.foxinline.modelo.Estado;
import java.util.ArrayList;
import java.util.List;
import javax.ejb.Stateless;
import javax.persistence.Query;

/**
 *
 * @author laverson
 */
@Stateless
public class CidadeServico extends ServicoGenerico<Cidade> {

    public CidadeServico() {
        super(Cidade.class);
    }

    public List<Cidade> findByNameEstado(String cidade, String sglEstado) {
        List<Cidade> results = getEntityManager().createQuery("select e from " + Cidade.class.getSimpleName()
                + " e where lower(e.nome) like '%" + cidade.toLowerCase().trim() + "%'"
                + "and lower(e.estado.sgl) like '%" + sglEstado.toLowerCase().trim() + "%' ").getResultList();
        return results;
    }

    public List<Cidade> autocomplete(String nome) {
        List<Cidade> results;

        if (nome == null) {
            nome = "";
        }

        nome = "'%" + nome.replace(" ", "%") + "%'";
        
        System.err.println("nome");

        String sql = "Select c from Cidade c where lower(c.nome) like " + nome.toLowerCase();

        Query query = getEntityManager().createQuery(sql).setMaxResults(50);

        results = query.getResultList();

        if (results == null || results.isEmpty()) {
            return new ArrayList<Cidade>();
        }

        return results;
    }

    public List<Cidade> autocomplete(String nome, Estado estado) {
        List<Cidade> results;

        nome = "'%" + nome.replace(" ", "%") + "%'";

        String sql = "Select c from Cidade c where lower(c.nome) like " + nome.toLowerCase()
                + " and c.estado = :estado";

        Query query = getEntityManager().createQuery(sql);

        query.setParameter("estado", estado);

        results = query.getResultList();

        if (results == null || results.isEmpty()) {
            return new ArrayList<Cidade>();
        }

        return results;
    }
}
